/** ****************************************************************************
@addtogroup ADC
@{
*******************************************************************************/

#ifndef _ADC_H_
#define _ADC_H_

#include <stm32f10x_adc.h>
#include "mcu.h"

#ifdef __cplusplus
extern "C" {
#endif


// ADC1 各通道对应的 PIN 脚
#define ADC1_CH_PA0		0 
#define ADC1_CH_PA1		1 
#define ADC1_CH_PA2		2 
#define ADC1_CH_PA3		3 
#define ADC1_CH_PA4		4 
#define ADC1_CH_PA5		5 
#define ADC1_CH_PA6		6 
#define ADC1_CH_PA7		7 
#define ADC1_CH_PB0		8 
#define ADC1_CH_PB1		9 
#define ADC1_CH_PC0		10
#define ADC1_CH_PC1		11
#define ADC1_CH_PC2		12
#define ADC1_CH_PC3		13
#define ADC1_CH_PC4		14
#define ADC1_CH_PC5		15

// ADC2 各通道对应的 PIN 脚
#define ADC2_CH_PA0		0 
#define ADC2_CH_PA1		1 
#define ADC2_CH_PA2		2 
#define ADC2_CH_PA3		3 
#define ADC2_CH_PA4		4 
#define ADC2_CH_PA5		5 
#define ADC2_CH_PA6		6 
#define ADC2_CH_PA7		7 
#define ADC2_CH_PB0		8 
#define ADC2_CH_PB1		9 
#define ADC2_CH_PC0		10
#define ADC2_CH_PC1		11
#define ADC2_CH_PC2		12
#define ADC2_CH_PC3		13
#define ADC2_CH_PC4		14
#define ADC2_CH_PC5		15

// ADC3 各通道对应的 PIN 脚
#define ADC3_CH_PA0		0 
#define ADC3_CH_PA1		1 
#define ADC3_CH_PA2		2 
#define ADC3_CH_PA3		3 
#define ADC3_CH_PF6		4 
#define ADC3_CH_PF7		5 
#define ADC3_CH_PF8		6 
#define ADC3_CH_PF9		7 
#define ADC3_CH_PF10	8 
//						9 
#define ADC3_CH_PC0		10
#define ADC3_CH_PC1		11
#define ADC3_CH_PC2		12
#define ADC3_CH_PC3		13
//						14
//						15

// ADC 引脚命名(名字，ADC控制器，引脚名)
#define ADC_DEFINE(NAME, ADC, PIN) \
	GPIO_DEFINE(NAME, PIN) \
	static const ADC_TypeDef* ADC_##NAME = ADC; \
	static const int ADC_##NAME##_Ch = ADC##_CH_##PIN;

/**
 * 获取 ADC 对应的 DMA 通道
 * @param adc 使用的 ADC 控制器
 * @return DMA 通道；NULL 表示不存在
 */
DMA_Channel_TypeDef* mcu_get_adc_dma_channel(ADC_TypeDef* adc);

/**
 * RF ADC 初始化
 * @param adc 使用的 ADC 控制器
 * @param channels 通道号列表(按顺序排列)，长度见 channelCount
 * @param channelCount 通道数
 * @param sampleCount 每通道采样点数量
 * @param samples 采样点数据缓冲区(大小 = channelCount * sampleCount * 2)
 * @param sampleCycles 采样时间(周期数), @see ADC_SampleTime_1Cycles5
 * @param dmaChannel 使用的 DMA 通道
 * @return 标准错误码
 */
std_err_t mcu_adc_init(ADC_TypeDef* adc, const uint8_t* channels, uint8_t channelCount, uint32_t sampleCount, void* samples, uint8_t sampleCycles, bool dmaMode);

/**
 * ADC 启动
 * @param adc 使用的 ADC 控制器
 * @return 标准错误码
 */
std_err_t mcu_adc_start(ADC_TypeDef* adc);

/**
 * ADC 停止
 * @param adc 使用的 ADC 控制器
 * @return 标准错误码
 */
std_err_t mcu_adc_stop(ADC_TypeDef* adc);

	
#ifdef __cplusplus
}
#endif

#endif  // _ADC_H_
/// @}
